概述
IconCache 是一个缓存类,缓存了跟Icon相关的信息,实际它主要缓存了应用的桌面图标 bitmap 和 label,除了memory缓存,还持久化到了数据库 app_icons.db 中。
IconCache 继承自 BaseIconCache,这个类在 frameworks/libs/systemui/iconloaderlib/src/com/android/launcher3/icons/cache/
目录下。
IconCache 在 LauncherAppState 中实例化,LauncherAppState 和 AllAppsList 持有对它的引用。
相关类
LauncherIcons 一个用于处理图标样式的帮助类,在缓存图标之前,会通过该类进行标准化处理。它继承自 BaseIconFactory,这个类在 frameworks/libs/systemui/iconloaderlib/src/com/android/launcher3/icons/
目录下。提供下面的一些方法:
- createIconBitmap
- createBadgedIconBitmap
- createScaledBitmapWithoutShadow
缓存图标的更新时通过 SerializedIconUpdateTask 任务来完成。
IconCache 中有 CachingLogic 的三个实现类的对象,分别是:
- ComponentCachingLogic
- ShortcutCachingLogic
- LauncherActivityCachingLogic
他们代表了不同组件图标的缓存逻辑。
图标处理
application 图标
1.get icon
1 | LoaderTask.run |
2.set icon
1 | BaseLoaderResults.bindWorkspaceItems |
- save icon
在LauncherModel的加载桌面数据流程里,也会初始化所有图标的信息。在执行完所有的load和bind之后,会进行更新数据库图标操作。在 IconCacheUpdateHandler 扫描到所有应用后,会开启一个线程 SerializedIconUpdateTask 进行更新图标操作,把图标缓存到内存和数据库里。
1 | LoaderTask.run |
appwidget 图标
get icon
1 | LoaderTask.run |
推荐文章
https://www.pianshen.com/article/2581187899/
https://blog.csdn.net/qinhai1989/article/details/86706877